function quickSort(arr) {
    function sort(arr, left, right) {
        if (left < right) {
            let i = left,
                j = right
            const base = arr[left]

            // 我们这里以第一个元素作为基准值，因此得从右边开始找比基准值小的数填充到第一个位置（即基准值刚开始的位置）
            // 若以最后一个元素作为基准值，则从左边开始找比基准值大的数填充到最后一个位置（即基准值结束的位置）

            // 先从右边找比基准值小的数
            while (i < j && arr[j] >= base) { // 这里得加等号，不然若存在重复元素，会死循环
                j--
            }
            arr[i] = arr[j]

            // 再从左边找比基准值大的数
            while (i < j && arr[i] <= base) { // 同理加等号
                i++
            }

            arr[j] = arr[i]

            arr[i] = base // 将基准值放到i所在的位置上，此时i的位置就固定了
                // 后面调整left到i-1和i+1到right就行了
            sort(arr, left, i - 1)
            sort(arr, i + 1, right)
        }
    }

    sort(arr, 0, arr.length - 1)

    return arr
}

let arr1 = [1, 3, 0, 7, 5, 6, 1, 4]
console.log(quickSort(arr1));